package blog

import (
	"context"

	"gitee.com/shiwjlinux/vblog01/common"
)

type Service interface {
	QueryBlog(context.Context, *QueryBlogRequest) (*BlogSet, error)
	DescribeBlog(context.Context, *DescribeBlogRequest) (*Blog, error)
	CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error)
	UpdateBlog(context.Context, *UpdateBlogRequest) (*Blog, error)
	UpdateBlogStatus(context.Context, *UpdateBlogStatusRequest) (*Blog, error)
	DeleteBlog(context.Context, *DeleteBlogRequest) (*Blog, error)
}

// 创建一个新的QueryBlogRequest实例
func NewQueryBlogRequest() *QueryBlogRequest {
	// 返回一个新的QueryBlogRequest实例，其中包含一个common.NewPageRequest()实例
	return &QueryBlogRequest{
		PageRequest: common.NewPageRequest(),
	}
}

// 创建一个新的DescribeBlogRequest实例，并返回该实例的指针
func NewDescribeBlogRequest(id string) *DescribeBlogRequest {
	// 创建一个新的DescribeBlogRequest实例，并初始化其Id字段
	return &DescribeBlogRequest{
		Id: id,
	}
}

func NewDeleteBlogRequest(id string) *DeleteBlogRequest {
	return &DeleteBlogRequest{
		Id: id,
	}
}

func NewUpdateBlogRequest(id string) *UpdateBlogRequest {
	return &UpdateBlogRequest{
		Id:                id,
		UpdateMode:        common.UPDATE_MODE_PUT,
		CreateBlogRequest: NewCreateBlogRequest(),
	}
}

type (
	QueryBlogRequest struct {
		*common.PageRequest
		Keywords string  `json:"keywords"`
		Status   *STATUS `json:"status"` // 0:草稿 1:已发布 2:已删除
		Title    string  `json:"title"`
		Id       string  `json:"id"`
	}
	DescribeBlogRequest struct {
		Id string `json:"id"`
	}
	UpdateBlogRequest struct {
		Id                 string             `json:"id" validate:"required"`
		UpdateMode         common.UPDATE_MODE `json:"update_mode"`
		*CreateBlogRequest `validate:"required"`
	}
	DeleteBlogRequest struct {
		Id string `json:"id" validate:"required"`
	}
)

func NewUpdateBlogStatusRequest(id string) *UpdateBlogStatusRequest {
	return &UpdateBlogStatusRequest{
		Id:                       id,
		ChangedBlogStatusRequest: NewChangedBlogStatusRequest(),
	}
}

type UpdateBlogStatusRequest struct {
	Id string `json:"id" validate:"required"`
	*ChangedBlogStatusRequest
}
